/*
 * 确认提示框
 */
(function($) {
	$.fn.teninedialog = function(options) {
		var defaults = {
			title: '标题',
			content: '',
			url: '', //远程URL
			showCloseButton: true, //显示关闭按钮
			otherButtons: [], //其他按钮文本，样式默认,["确定","取消"]
			otherButtonStyles: ['btn-primary','btn-grey'], //其他按钮的样式，['btn-primary','btn-primary'],bootstrap按钮样式
			bootstrapModalOption: {}, //默认的bootstrap模态对话框参数
			dialogShow: function() {}, //对话框即将显示事件
			dialogShown: function() {}, //对话框已经显示事件
			dialogHide: function() {}, //对话框即将关闭
			dialogHidden: function() {}, //对话框已经关闭事件
			clickButton: function(sender, modal, index) {} //选中按钮的序号，排除关闭按钮。sender:按钮jquery对象，model:对话框jquery对象,index:按钮的顺序,otherButtons的数组下标
		}
		var options = $.extend(defaults, options);
		var modalID = '';
		var loadimg = "";
		if (options.content == '') {
			options.content = '<img id="ajax-loader" style="display:none" height="32" width="32" src="' + loadimg + '" />正在获取数据...';
		}

		//生成一个惟一的ID
		function getModalID() {
			var d = new Date();
			var vYear = d.getFullYear();
			var vMon = d.getMonth() + 1;
			var vDay = d.getDate();
			var h = d.getHours();
			var m = d.getMinutes();
			var se = d.getSeconds();
			var sse = d.getMilliseconds();
			return 't_' + vYear + vMon + vDay + h + m + se + sse;
		}

		$.fn.extend({
			closeDialog: function(modal) {
				var modalObj = modal;
				modalObj.modal('hide');
			}
		});

		return this.each(function() {
			var obj = $(this);
			modalID = getModalID();

			$(this).attr("data-target", modalID);


			var tmpHtml = '<div class="modal fade" id="{ID}" tabindex="-1" role="dialog" aria-labelledby="myModalLabel_{ID}" aria-hidden="true"><div class="modal-dialog"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button><h4 class="modal-title" id="myModalLabel_{ID}">{title}</h4></div><div class="modal-body" id="body_{ID}" style="overflow-y: auto;max-height: 600px;">{body}</div><div class="modal-footer"><img id="ajax-loader" style="display:none" height="32" width="32" src="' + loadimg + '" />{button}</div></div></div></div>';
			var buttonHtml = '<button class="btn" data-dismiss="modal" aria-hidden="true">关闭</button>';
			if (!options.showCloseButton && options.otherButtons.length > 0) {
				buttonHtml = '';
			};
			//生成按钮
			var btnClass = 'cls-' + modalID;
			for (var i = 0; i < options.otherButtons.length; i++) {
				buttonHtml += '<button buttonIndex="' + i + '" class="' + btnClass + ' btn ' + options.otherButtonStyles[i] + '">' + options.otherButtons[i] + '</button>';
			}
			//替换模板标记
			tmpHtml = tmpHtml.replace(/{ID}/g, modalID).replace(/{title}/g, options.title).replace(/{body}/g, options.content).replace(/{button}/g, buttonHtml);
			$(obj).append(tmpHtml);

			var modalObj = $('#' + modalID);
			//绑定按钮事件,不包括关闭按钮
			$('.' + btnClass).click(function() {
				var index = $(this).attr('buttonIndex');
				options.clickButton($(this),modalObj,index);
			});
			//绑定本身的事件
			modalObj.on('show.bs.modal', function() {
				//异步加载远程URL
				if (options.url != '') {
					$('#ajax-loader').show();
					$.ajax({
						type: "get",
						url: options.url,
						data: "dialogModalId=" + modalID + "&ajaxloader=ajax-loader",
						success: function(data) {
							$('#ajax-loader').hide();
							$('#body_' + modalID).html(data);
						},
						error: function(e) {
							$('#ajax-loader').hide();
							$('#body_' + modalID).html("加载失败!");
						}
					});
				} else {
					$('#body_' + modalID).html(options.content);
				}
				options.dialogShow();
			});
			modalObj.on('shown.bs.modal', function() {
				options.dialogShown();
			});
			modalObj.on('hide.bs.modal', function() {
				options.dialogHide();
			});
			modalObj.on('hidden.bs.modal', function() {
				options.dialogHidden();
				obj.removeAttr("data-target");
				modalObj.remove();
			});
			modalObj.modal(options.bootstrapModalOption);
		});

	};


	$.extend({
		teninedialog: function(options) {
			$("body").teninedialog(options);
		}
	});

})(jQuery);


//手机号码或固定电话验证验证
function checkMobile(mobile){ 
    if(!(/^1[3|4|5|8][0-9]\d{4,8}$/.test(mobile))&&!(/^0\d{2,3}\d?\d{7,8}\d?/.test(mobile))){ 
        return true; 
    } 
    return false;
} 
//身份证校验
function IDCardCheck(num) {
    num = num.toUpperCase();
    // 身份证号码为15位或者18位，15位时全为数字，18位前17位为数字，最后一位是校验位，可能为数字或字符X。
    if (!(/(^\d{15}$)|(^\d{17}([0-9]|X)$)/.test(num))) {
        return false;
    }
    // 下面分别分析出生日期和校验位
    var len, re;
    len = num.length;
    if (len == 15) {
        re = new RegExp(/^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/);
        var arrSplit = num.match(re);

        // 检查生日日期是否正确
        var dtmBirth = new Date('19' + arrSplit[2] + '/' + arrSplit[3] + '/' + arrSplit[4]);
        var bGoodDay;
        bGoodDay = (dtmBirth.getYear() == Number(arrSplit[2])) && ((dtmBirth.getMonth() + 1) == Number(arrSplit[3])) && (dtmBirth.getDate() == Number(arrSplit[4]));
        if (!bGoodDay) {
           // alert('输入的身份证号里出生日期不对！');
            return false;
        }
        else {
            // 将15位身份证转成18位
            // 校验位按照ISO 7064:1983.MOD 11-2的规定生成，X可以认为是数字10。
            var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
            var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
            var nTemp = 0, i;
            num = num.substr(0, 6) + '19' + num.substr(6, num.length - 6);
            for (i = 0; i < 17; i++) {
                nTemp += num.substr(i, 1) * arrInt[i];
            }
            num += arrCh[nTemp % 11];
            return true;
        }
    }
    if (len == 18) {
        re = new RegExp(/^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/);
        var arrSplit = num.match(re);

        // 检查生日日期是否正确
        var dtmBirth = new Date(arrSplit[2] + "/" + arrSplit[3] + "/" + arrSplit[4]);
        var bGoodDay;
        bGoodDay = (dtmBirth.getFullYear() == Number(arrSplit[2])) && ((dtmBirth.getMonth() + 1) == Number(arrSplit[3])) && (dtmBirth.getDate() == Number(arrSplit[4]));
        if (!bGoodDay) {
            return false;
        }
        else {
            // 检验18位身份证的校验码是否正确。
            // 校验位按照ISO 7064:1983.MOD 11-2的规定生成，X可以认为是数字10。
            var valnum;
            var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
            var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
            var nTemp = 0, i;
            for (i = 0; i < 17; i++) {
                nTemp += num.substr(i, 1) * arrInt[i];
            }
            valnum = arrCh[nTemp % 11];
            if (valnum != num.substr(17, 1)) {
                // alert('18位身份证的校验码不正确！'); //应该为： + valnum
                return false;
            }
            return true;
        }
    }
    return false;
}

//军官证验证
function isOfficerCard(num){
	// 军官证为7到21位任意字符数字组合
	if (!(/^[a-zA-Z0-9]{7,21}$/.test(num))) {
        return true;
    }
	return false;
}

//护照验证
function isPassportCard(num){
	// 护照为3到21位任意字符数字组合
	if (!(/^[a-zA-Z0-9]{3,21}$/.test(num))) {
        return true;
    }
	return false;
}

//港澳通行证、台胞证验证
function isHKMacCard(num){
	// 港澳通行证、台胞证为5到21位任意字符数字组合
	if (!(/^[a-zA-Z0-9]{5,21}$/.test(num))) {
        return true;
    }
	return false;
}

//显示错误或提示信息（需要引用jNotify相关文件）
function showError(tips, TimeShown, autoHide) {
    jError( 
			//下面的内容为提示的内容。
			'<strong>'+tips+'</strong>',
			{
				//下面为提示框的具体参数设置。
				autoHide : autoHide,   //jnotify自动隐藏 true false
				clickOverlay : false,  //jnotify弹出层单击遮罩层才关闭提示条（遮罩层即半透明黑色背景）
				MinWidth : 250,   //jnotify弹出层宽度
				TimeShown : TimeShown,   //显示时长。只有当autoHide（自动隐藏）参数为true时起作用。
				ShowTimeEffect : 200,   //jnotify完全显示出来花费时间。
				HideTimeEffect : 200,   //与上面参数相反，jnotify从页面上消失所需时间
				LongTrip : 20,          //当jnotify弹出层提示条显示和隐藏时的位移
				HorizontalPosition : 'center',  //jnotify弹出层提示条位于水平方向上的位置，参数有left,center,right
				VerticalPosition : 'center',    //jnotify弹出层提示条位于垂直方向上的位置，参数有top,center,bottom
				ShowOverlay : true,   //是否显示遮罩层（遮罩层即半透明黑色背景）
				ColorOverlay : '#000',   //遮罩层颜色
				OpacityOverlay : 0.3,   //遮罩层透明度，最大是1，最小是0.1
				onClosed : function(){
				},   //关闭jnotify弹出层提示条调用的函数
				onCompleted : function(){}   //打开jnotify弹出层提示条调用的函数
			}
	);
}

//显示提示信息
function showTips(tips, TimeShown, autoHide) {
	jSuccess( 
			//下面的内容为提示的内容。
			'<strong>'+tips+'</strong>',
			{
				//下面为提示框的具体参数设置。
				autoHide : autoHide,   //jnotify自动隐藏 true false
				clickOverlay : false,  //jnotify弹出层单击遮罩层才关闭提示条（遮罩层即半透明黑色背景）
				MinWidth : 250,   //jnotify弹出层宽度
				TimeShown : TimeShown,   //显示时长。只有当autoHide（自动隐藏）参数为true时起作用。
				ShowTimeEffect : 200,   //jnotify完全显示出来花费时间。
				HideTimeEffect : 200,   //与上面参数相反，jnotify从页面上消失所需时间
				LongTrip : 20,          //当jnotify弹出层提示条显示和隐藏时的位移
				HorizontalPosition : 'center',  //jnotify弹出层提示条位于水平方向上的位置，参数有left,center,right
				VerticalPosition : 'center',    //jnotify弹出层提示条位于垂直方向上的位置，参数有top,center,bottom
				ShowOverlay : true,   //是否显示遮罩层（遮罩层即半透明黑色背景）
				ColorOverlay : '#000',   //遮罩层颜色
				OpacityOverlay : 0.3,   //遮罩层透明度，最大是1，最小是0.1
				onClosed : function(){
					location.reload();
				},   //关闭jnotify弹出层提示条调用的函数
				onCompleted : function(){}   //打开jnotify弹出层提示条调用的函数
			}
	);
}

